#ifndef CONCURRENCY_H
#define CONCURRENCY_H

#include <string>

using std::string;

//****************************************************************************
// class Concurrency
// abstract class for holding general concurrency interface
//****************************************************************************
class Concurrency
{
public:
	virtual bool MakeProcess(string commandToExecute, int *OutProcessID) = 0;
	virtual void WaitForProcess(int processId) = 0;
};

//****************************************************************************
// class WinConcurrency
// class for instantiating objects that handle concurrency on windows platform.
//****************************************************************************
class WinConcurrency : public Concurrency
{
public:
	bool MakeProcess(string commandToExecute, int *OutProcessID);
	void WaitForProcess(int processId);
};

//****************************************************************************
// class OtherOsConcurrency
// class for instantiating objects that handle concurrency on a non windows 
// platform.
//****************************************************************************
class OtherOsConcurrency : public Concurrency
{
public:
	bool MakeProcess(string commandToExecute, int *OutProcessID)
		{throw ("not implemented"); return false;}
	void WaitForProcess(int processId)
		{throw ("not implemented"); return;}
};


#endif //CONCURRENCY_H